<?php
class OsztalyokController extends AppController {

	var $name = 'Osztalyok';
	var $components = array('Cegosztaly');
	var $uses = array('Osztaly', 'Szamla', 'Naplo');
	
	function isAuthorized(){
		if($this->Auth->user('csoport') == 1){		//admin jogosultságú júzerek
			return true;
		}
		elseif($this->Auth->user('csoport') == 2){	//könyvelő
			if(in_array($this->request->action, array(
														'index',
														'add',
														'edit',
														'search'
														))){
				return true;
			}
		}
		elseif($this->Auth->user('csoport') == 3){	//betekintők
			if(in_array($this->request->action, array(
														'search'
														))){
				return true;
			}
		}
		elseif($this->Auth->user('csoport') == 4){	//osztályvezetők
			if(in_array($this->request->action, array(
														'search'
														))){
				return true;
			}
		}
		return false;		//minden más tiltva
	}

	function index() {
		//csak azokkal az osztályokkal foglalkozunk ami ebben a cégben és ebben az évben van
		$this->paginate = array(
									'Osztaly' =>
													array(
														'joins' => array(
																		array(
																			'table' => 'gyujtok_osztalyok',
																			'alias' => 'GyujtokOsztalyok',
																			'type' => 'inner',
																			'conditions' => array(
																									'GyujtokOsztalyok.osztaly_id = Osztaly.id'
																									)
																			),
																		array(
																			'table' => 'gyujtok',
																			'alias' => 'Gyujto',
																			'type' => 'inner',
																			'conditions' => array(
																									'GyujtokOsztalyok.gyujto_id = Gyujto.id',
																									'Gyujto.id' => $this->Session->read('Settings.cegId')
																									)
																			)
																		)
															)
														);
		$this->Osztaly->unbindModel(array('hasMany' => array('Bizonylat'), 'hasAndBelongsToMany' => array('User')), false);	//a false ahhoz kell, hogy a paginator is tudja használni az unbindmodelt
		$this->set('osztalyok', $this->paginate('Osztaly', array('Osztaly.ev' => $this->Session->read('Settings.ev'))));
	}

	function add($redirect = true) {
		if (!empty($this->request->data)) {

			$this->request->data['Gyujto']['Gyujto'] = array($this->request->data['Gyujto']['Gyujto'], $this->request->data['Osztaly']['igazgatosag']);

			$this->Osztaly->create();
			if ($this->Osztaly->save($this->request->data)) {
				$this->Session->setFlash(__('Az osztály létrejött'));
				$this->Osztaly->createView($this->Osztaly->id);
				
				//számlaszámok és naplók létrehozása
				$hiba = false;
				if($this->request->data['Osztaly']['huf']){
					$szamla = array('Szamla' => array(
																'ceg_id' => $this->Session->read('Settings.cegId'),
																'szam' => '381' . $this->request->data['Osztaly']['kod'],
																'nev' =>  $this->request->data['Osztaly']['nev'] . ' HUF pénztár',
																'ev' => $this->Session->read('Settings.ev')
																 ));
					$this->Szamla->create();
					if($this->Szamla->save($szamla)){
						$uzenet = 'A HUF pénztár számlát sikeresen létrehoztam';
						//létrejött a számlaszám létrehozhatjuk a naplót is
						//keressük meg a jelenlegi max sorszámot
						$sorszam = $this->Osztaly->Bizonylat->Naplo->find('first',
																						  array(
																								'conditions' => array(
																															'ceg_id' => $this->Session->read('Settings.cegId'),
																															'naplotipus_id' => 1,	//HUF pénztár
																															'valuta_id' => 1,			//HUF
																															'ev' => $this->Session->read('Settings.ev')
																															),
																								'order' => 'sorszam DESC',
																								'fields' => 'sorszam',
																								'recursive' => -1
																								));
						$naplo = array('Naplo' => array(
																'ceg_id' => $this->Session->read('Settings.cegId'),
																'naplotipus_id' => 1,	//HUF pénztár
																'valuta_id' => 1,			//HUF
																'sorszam' => ($sorszam['Naplo']['sorszam']+1),
																'nev' => $this->request->data['Osztaly']['nev'],
																'ev' => $this->Session->read('Settings.ev'),
																'alapertelmezett_osztaly' => $this->Osztaly->id,
																'alapertelmezett_szamla' => $this->Szamla->id
																));
						$this->Osztaly->Bizonylat->Naplo->create();
						if($this->Osztaly->Bizonylat->Naplo->save($naplo))
							$uzenet = 'A HUF pénztár számlát és naplót sikeresen létrehoztam';
						else
							$hiba = $uzenet = 'A HUF pénztár számlát létrehoztam, de a naplót nem sikerült';
					}
					else
						$hiba = $uzenet = 'A HUF pénztár számla nem jött létre';
				}
				if($this->request->data['Osztaly']['sy']){
					$szamla = array('Szamla' => array(
																'ceg_id' => $this->Session->read('Settings.cegId'),
																'szam' => '382' . $this->request->data['Osztaly']['kod'],
																'nev' =>  $this->request->data['Osztaly']['nev'] . ' HUF pénztár',
																'ev' => $this->Session->read('Settings.ev')
																 ));
					$this->Szamla->create();
					if($this->Szamla->save($szamla)){
						$uzenet .= ' A SY pénztár számlát sikeresen létrehoztam';
						//létrejött a számlaszám létrehozhatjuk a naplót is
						$naplo = array('Naplo' => array(
																'ceg_id' => $this->Session->read('Settings.cegId'),
																'naplotipus_id' => 6,	//Syama pénztár
																'valuta_id' => 3,			//SY
																'sorszam' => ($sorszam['Naplo']['sorszam']+1),
																'nev' => $this->request->data['Osztaly']['nev'],
																'ev' => $this->Session->read('Settings.ev'),
																'alapertelmezett_osztaly' => $this->Osztaly->id,
																'alapertelmezett_szamla' => $this->Szamla->id
																));
						$this->Osztaly->Bizonylat->Naplo->create();
						if($this->Osztaly->Bizonylat->Naplo->save($naplo))
							$uzenet .= ' A SY naplót sikeresen létrehoztam';
						else
							$hiba = $uzenet .= ' A SY pénztár számlát létrehoztam, de a naplót nem sikerült';
					}
					else
						$hiba = $uzenet .= ' A SY pénztár számla nem jött létre';
				}
				
				if($hiba)
					$this->Session->setFlash($uzenet, 'default', array('class' => 'alert'));
				else
					$this->Session->setFlash($uzenet);
					
				if($redirect)
					$this->redirect(array('action'=>'index'));
			}
			else {
				$this->Session->setFlash(__('Nem tudtam az osztályt létrehozni.'), 'default', array('class' => 'alert'));
			}
		}
		$gyujtok = $this->Osztaly->Gyujto->find('list');
		$igazgatosagok = $this->getIgazgatosagok();
		$this->set(compact('gyujtok', 'igazgatosagok'));
	}

	function getIgazgatosagok(){
		//igazgatóságok listája
		$igazgatosagGyujtotipus = $this->Setting->getRow('igazgatosag_gyujtotipusId');
		$_igazgatosagok = $this->Osztaly->Gyujto->Gyujtotipus->find('all',
																					  array(
																						'conditions' => array('id' => $igazgatosagGyujtotipus['Setting']['value'])
																				));
		$_igazgatosagok = $_igazgatosagok[0]['Gyujto'];
		foreach($_igazgatosagok as $i){
			$igazgatosagok[$i['id']] = $i['nev'];
		}
		return($igazgatosagok);
	}

	function edit($id = null) {
		if (!$id && empty($this->request->data)) {
			$this->Session->setFlash(__('Invalid Osztaly'), 'default', array('class' => 'alert'));
			$this->redirect(array('action'=>'index'));
		}

		$igazgatosagok = $this->getIgazgatosagok();
		
		//összes gyüjtő
		$gyujtok = $this->Osztaly->Gyujto->find('list');
		$this->set(compact('gyujtok', 'igazgatosagok'));

		if (!empty($this->request->data)) {
			//hogy a user kötések ne vesszenek el ezeket kiolvassuk a db-ből és itt kézzel hozzáadjuk
			$this->Osztaly->unbindModel($this->Cegosztaly->getunBindArray(array('Gyujto')));
			$user = $this->Osztaly->read(null, $this->request->data['Osztaly']['id']);
			$userIds = array();
			foreach($user['User'] as $u){
				$userIds[] = $u['id'];
			}
			//kicsit átalakítjuk
			$this->request->data['User'] = array('User' => $userIds);
			$this->Osztaly->unbindModel($this->Cegosztaly->getunBindArray());
			$o = $this->Osztaly->read('kod', $this->request->data['Osztaly']['id']);
			//debug($this->request->data);die();
			
			//igazgatóság kód visszatétele a Gyüjtő tömbbe
			$this->request->data['Gyujto']['Gyujto'] = array($this->request->data['Gyujto']['Gyujto'][0], $this->request->data['Osztaly']['igazgatosag']);
			
			if ($this->Osztaly->save($this->request->data)) {
				//sikeresen mentettünk módosítás után
				$uzenet = '';
				//nézzük meg, hogy változott-e a kód, mert ha igen a kapcsolódó pénztárt is változtatni kell
				if($o['Osztaly']['kod'] != $this->request->data['Osztaly']['kod']){
					$szamla = $this->Szamla->find('first',
															array(
																'conditions' => array(
																							'Szamla.ev' => array(0, $this->Session->read('Settings.ev')),
																							'Szamla.ceg_id' => $this->Session->read('Settings.cegId'),
																							'Szamla.szam' => '381' . $o['Osztaly']['kod']
																							),
																'recursive' => -1
																));
					
					if(isset($szamla['Szamla'])){
						$szamla['Szamla']['szam'] = '381' . $this->request->data['Osztaly']['kod'];
						if($this->Szamla->save($szamla)){
							$uzenet = 'A kapcsolódó pénztár számla száma sikeresen módosítva';
						}
						else
							$uzenet = 'A kapcsolódó pénztár számla számát nem sikerült módosítani';
					}
					else
						$uzenet = 'Nincs kapcsolódó pénztár számla, így azt nem módosítottam';
					
					//krisna-völgy esetében a syama pénztárat is módosítani kell	todo: HC
					if($this->Session->read('Settings.cegId') == 2){
						$szamla = $this->Szamla->find('first',
															array(
																'conditions' => array(
																							'Szamla.ev' => array(0, $this->Session->read('Settings.ev')),
																							'Szamla.ceg_id' => $this->Session->read('Settings.cegId'),
																							'Szamla.szam' => '382' . $o['Osztaly']['kod']
																							),
																'recursive' => -1
																));
					
						if(isset($szamla['Szamla'])){
							$szamla['Szamla']['szam'] = '382' . $this->request->data['Osztaly']['kod'];
							if($this->Szamla->save($szamla)){
								$uzenet .= ' A kapcsolódó Syama pénztár számla száma sikeresen módosítva';
							}
							else
								$uzenet .= ' A kapcsolódó Syama pénztár számla számát nem sikerült módosítani';
						}
						else
							$uzenet .= ' Nincs kapcsolódó Syama pénztár számla, így azt nem módosítottam';
						}
				}
				$uzenet = 'Az osztály sikeresen módosítva ' . $uzenet;
			}
			else {
				$uzenet = array('Nem sikerült az osztályt módosítani' . $uzenet, 'default', array('class' => 'alert'));
			}
			$this->Session->setFlash($uzenet);
			$this->redirect(array('action'=>'index'));
		}
		
		if (empty($this->request->data)) {
			$this->Osztaly->unbindModel($this->Cegosztaly->getunBindArray(array('User')));
			$this->request->data = $this->Osztaly->read(null, $id);
		}
	}

	function search($naploId = null){
		//ajaxos keresés a számlákban
		Configure::write('debug', 0);
		$reszlet = $this->request->data['Bizonylat']['osztalytol'] .
						$this->request->data['Bizonylat']['osztalyig'] .
						$this->request->data['Bizonylat']['_osztalytol'] .
						$this->request->data['Bizonylat']['_osztalyig'] .
						$this->request->data['Naplo']['alapertelmezett_osztaly'] .
						$this->request->data['Riport']['osztalytol'] .
						$this->request->data['Riport']['osztalyig'] .
						@$this->params->query['term'] ;

		if(is_numeric($reszlet))
			$like = array('Osztaly.kod LIKE' => "$reszlet%");
		else	//osztálynevet kezdett gépelni
			$like = array('Osztaly.nev LIKE' => mb_strtoupper(mb_substr($reszlet, 0, 1, 'utf-8'), 'utf-8') . mb_substr($reszlet, 1, mb_strlen($reszlet, 'utf-8')-1, 'utf-8') . "%");
		//debug($like);
		$this->Osztaly->unbindModel($this->Cegosztaly->getunBindArray());
		$this->Osztaly->bindModel($this->Cegosztaly->getBindArray($this->Session->read('Settings.cegId')));

		$oIds = $this->Osztaly->User->getOsztalyId($this->Session->read('Auth.User.id'), $this->Session->read('Settings.ev'));

		$o = $this->Osztaly->find('all',
								array(
									//'conditions' => array("Osztaly.kod LIKE '$reszlet%'", 'Osztaly.ev'),
									'conditions' => array(
															$like,
															'Osztaly.ev' => array(0, $this->Session->read('Settings.ev')),
															'Osztaly.id' => $oIds
															),
									//'fields' => array('Osztaly.id', 'Osztaly.kod', 'Osztaly.nev'),
									'order' => 'Osztaly.kod ASC',
									'limit' => 5,
									'offset' => $this->request->data['offset'],
									//'recursive' => -1
								)
								);

		$this->set('jQ', isset($this->params->query['term']) ? true : false);
		if($naploId){
			$naploEv = $this->Naplo->getEv($naploId);
			if($naploEv != $o[0]['Osztaly']['ev']){
				$o = array( array('Osztaly' => array('id' => 0,
						   'kod' => 'Év Hiba: ',
						   'nev' => 'Az osztály ('.$o[0]['Osztaly']['ev'].') és a napló ('.$naploEv.') éve nem azonos!')));
			}
		}
		//debug($o);
		$this->set('searchResults', $o);
		$this->render('search_results');
	}
}
?>
